package com.zyx.tl.demo01;

/**
 * 使用synchronized实现线程间数据的顺序访问
 *
 * ThreadLocal与synchronized关键字的差别：
 *  ThreadLocal
 *      同步机制采用'以时间换空间'的方式, 只提供了一份变量, 让不同的线程排队访问
 *      多个线程之间访问资源的同步
 *  ThreadLocal
 *      ThreadLocal采用'以空间换时间'的方式, 为每一个线程都提供了一份变量的副本,从而实现同时访问而相不干扰
 *      多个线程之间做到数据隔离
 */
public class MyDemo02 {

    // 变量
    private String content;

    private String getContent() {
        return content;
    }

    private void setContent(String content) {
        this.content = content;
    }

    public static void main(String[] args) {
        MyDemo02 demo = new MyDemo02();

        for (int i = 0; i < 5; i++) {

            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    /*
                        每个线程: 存一个变量 , 过一会 取出这个变量
                     */
                    synchronized (MyDemo02.class){
                        demo.setContent(Thread.currentThread().getName() + "的数据");
                        System.out.println("-----------------------");
                        System.out.println(Thread.currentThread().getName() + "--->" + demo.getContent());
                    }
                }
            });
            // 线程0~4
            thread.setName("线程" + i);
            thread.start();
        }
    }

}
